package recibirOrden.impl;


import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;

import recibirOrden.*;

import javax.jws.WebService;

import bd.BusinessDelegate;
import dtos.ItemPedido;
import dtos.ModuloDTO;
import dtos.OrdenPedidoDTO;
import exceptions.EntityAlreadyExistException;

@WebService(serviceName = "OrdenDespachoSoapWSBeanService", endpointInterface = "recibirOrden.OrdenDespachoSoapWS", targetNamespace = "http://soap.interfaces.tpo.ia.fain.uade/")
public class OrdenDespachoSoapWSImpl implements OrdenDespachoSoapWS {
	public recibirOrden.Resultado recibirOrdenDespacho(
			recibirOrden.OrdenDespacho arg0)
			throws ArticuloDesconocidoException_Exception,
			OrdenDespachoYaExisteException_Exception, Exception_Exception {
		Resultado r = new Resultado();
		try {
			BusinessDelegate bd = BusinessDelegate.getInstance(); 
			//el bd no encuentra. devuelve nullpoint
			bd.CrearOrdenDespacho(casteoDespacho(arg0));
			r.setMensaje("todo bien");
		} catch (EntityAlreadyExistException e) {
			// TODO: handle exception
			String message = e.getMessage();
			if(message.contains("ARTICULO"))
			{
				throw new ArticuloDesconocidoException_Exception(message);
			}
			else
			{
				throw new OrdenDespachoYaExisteException_Exception(message);
			}
		}
	
		
		return r;
	}
	



	private OrdenPedidoDTO casteoDespacho(OrdenDespacho desp){
		OrdenPedidoDTO ordDes = new OrdenPedidoDTO();
		ordDes.setCodigoDespacho(desp.getCodigoDespacho());
		ordDes.setCodigoVenta(desp.getCodigoVenta());
		
		ModuloDTO monitoreo = new ModuloDTO();
		monitoreo.setId(Integer.parseInt(desp.getIdMonitoreo()));
		ModuloDTO portal = new ModuloDTO();
		portal.setId(Integer.parseInt(desp.getIdPortal()));
		
		ordDes.setIdPortal(portal);
		
		List<ItemPedido> lista = new ArrayList<ItemPedido>();
		for (Item listaItems: desp.getItems()){
			ItemPedido item = new ItemPedido();
			item.setCantidad(listaItems.getCantidad());
			item.setCodigo(listaItems.getArticuloId());
			lista.add(item);
		}
		
		ordDes.setItems(lista);
		return ordDes;
	}
}